package cn.com.zzl.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import cn.com.zzl.po.User;

/**
 * Description：List集合工具类(简化版)
 * Created by 朱正磊 on 2017-08-18 9:51.
 */
public class ListSimpleUtil {

	/**
	 * 说明：去重含有属性的javaBean
	 * @Desc 去除Lis集合中重复的元素
	 * @param objectList list集合
	 * @param methodName 方法名，这里通常指的是属性的getter方法。
	 * @param <T> 泛型
	 * @return 返回去重之后的list集合
	 */
	public static <T> List<T> removeDuplicate(List<T> objectList, String methodName){
		if(objectList != null && !objectList.isEmpty()){
			for(int i = 0; i < objectList.size(); i++){//外循环
				for(int j = objectList.size() - 1; j > i; j--){//内循环
					if(ReflectUtil.invoke(objectList.get(i), methodName) != null){
						if(ReflectUtil.invoke(objectList.get(i), methodName)
								.equals(ReflectUtil.invoke(objectList.get(j), methodName))){
							objectList.remove(j);
						}
					}
				}
			}
		}
		return objectList;
	}

	/**
	 * 说明：去重Integer，Boolean等基本数据类型的对象封装类型（以及String）
	 * @Desc 去除Lis集合中重复的元素
	 * @param list list集合
	 * @param <T> 泛型
	 * @return 返回去重之后的list集合
	 */
	public static <T> List<T> removeDuplicate(List<T> list){
		List<T> newList = new ArrayList<>();
		for (T t : list) {
			if (!newList.contains(t)) {
				newList.add(t);
			}
		}
		return newList;
	}

	/**
	 * @Desc 测试去重List集合里面含有属性的javaBean
	 * @param args 参数
	 */
	public static void main(String[] args) {
		List<User> list = new ArrayList<>();
		User user1 = new User();
		user1.setUsername("张三");
		user1.setSex("1");
		User user2 = new User();
		user2.setUsername("张三");
		user2.setSex("1");
		User user3 = new User();
		user3.setUsername("王五");
		user3.setSex("0");
		list.add(user1);
		list.add(user2);
		list.add(user3);

		List<User> userList = removeDuplicate(list, "getUsername");
		Map<String, Object> map = MapUtil.javaBeanToMap(userList);
		//打印输出2
		System.out.println(map.size());
		//打印输出BeanMap<[{id=null, username=张三, birthday=null, sex=1, address=null}, {id=null, username=王五, birthday=null, sex=0, address=null}]>
		System.out.println(map);
	}

	/**
	 * @Desc 测试去重List集合里面Integer等基本数据封装类型（以及String）
	 * @param args 参数
	 */
	/*public static void main(String[] args) {
		List<String> list1 = new ArrayList<>();
		list1.add("aaa");
		list1.add("bbb");
		list1.add("aaa");
		list1.add("aba");
		list1.add("aaa");
		List<String> strList1 = removeDuplicate(list1);
		//[aaa, bbb, aba]
		System.out.println(strList1);

		List<Integer> list2 = new ArrayList<>();
		list2.add(1);
		list2.add(2);
		list2.add(2);
		list2.add(3);
		list2.add(3);
		List<Integer> strList2 = removeDuplicate(list2);
		//[1, 2, 3]
		System.out.println(strList2);
	}*/

}
